package battleco

import (
	"wails/schema/config/commonco"
	"wails/schema/enums/battleenum"
)

// @schema_export --ident=schema --json --config=单位
// @schema_go
// @cache_ts
// @alias 单位
type C单位 struct {
	// @alias 标识
	B标识 string
	// @alias 标旗
	B标旗 map[D单位标旗]bool
	// @alias 技能集
	J技能集 map[string]*S单位_技能
	// @alias 技能命令初始值
	J技能命令初始值 string
	// @alias 行为集
	X行为集 map[string]*S单位_行为组
	// @alias 响应集
	X响应集 map[string]string `link:"响应"`
	// @alias 质量
	Z质量 float32
	// @alias 半径
	B半径 float32
	// @alias 所在平面
	S所在平面 battleenum.D单位平面
	// @alias 受击平面
	S受击平面 map[battleenum.D单位平面]bool
	// @alias 碰撞
	P碰撞 map[battleenum.D单位碰撞]bool
	// @alias 活力
	H活力 map[battleenum.H活力类型]*D单位活力
	// @alias 移动器
	Y移动器 string `link:"移动器"`
	// 单位的最大速度(米/秒)
	// @alias 移动速度
	Y移动速度 float64
	// 用于格子类的游戏
	// @alias 移动范围
	Y移动范围 float32
	// @alias 闲逛范围
	X闲逛范围 float32
	// @alias 警戒范围
	J警戒范围 float32
	// 对武器攻速的修正，默认为1.0
	// @alias 攻击速率
	G攻击速率 float32 `value:"1.0"`
	// 【属性】为创建时设置的动态属性
	// 基础属性由等级决定
	// @alias 属性
	S属性 map[string]*commonco.S属性值
	// @alias 击杀掉落
	J击杀掉落 string `link:"战利品"`
	// @alias 击杀经验
	J击杀经验 int
	// @alias 埋葬时间
	// 单位死亡后，等待埋葬的时间
	M埋葬时间 float64
	// @alias 足印
	Z足印 string `link:"足印"`
	// @alias 战术集
	Z战术集 map[string]string `link:"战术"`
	// @alias 单位表现
	D单位表现 string `link:"表现" linkType:"表现_单位"`
	// @alias 创建表现
	C创建表现 map[string]*S单位创建表现 `link:"表现"`
	// @alias 创建脚本
	C创建脚本 map[string]string `link:"表现"`
}

type S单位创建表现 struct {
	// @alias 创建时机
	C创建时机 battleenum.E单位创建时机

	// @alias 销毁时机
	X销毁时机 battleenum.E单位销毁时机

	// @alias 被动持续
	B被动持续 bool

	// @alias 表现
	B表现 string `link:"表现"`
}

type S单位_技能 struct {
	// @alias 技能
	J技能 string `link:"技能"`
	// @alias 等级
	D等级 int `value:"1"`
}

type S单位_行为组 struct {
	// @alias 行为
	X行为 string `link:"行为"`
	// @alias 数量
	S数量 int `value:"1"`
}

type D单位武器 struct {
	P炮塔 string `link:"炮塔"`
	W武器 string `link:"武器"`
}

// @alias 单位活力
type D单位活力 struct {
	// @alias 初始值
	C初始值 int
	// @alias 最大值
	Z最大值 int
	// @alias 恢复速率
	H恢复速率 float64
	// @alias 脱战活力恢复时间
	// 单位离开战斗后恢复护盾所需要的时间。
	T脱战活力恢复时间 float64
	// @alias 承受一点伤害获得活力
	// 单位每承受一点伤害所获得的活力值
	C承受一点伤害获得活力 map[battleenum.S伤害类型]float64
	// @alias 承受一次伤害获得活力
	// 每受到一次伤害获得的活力
	C承受一次伤害获得活力 map[battleenum.S伤害类型]float64
	// @alias 造成一点伤害吸收活力
	// 单位每造成一点伤害所获得的活力系数
	Z造成一点伤害吸收活力 map[battleenum.S伤害类型]float64
	// @alias 造成一次伤害吸收活力
	Z造成一次伤害吸收活力 map[battleenum.S伤害类型]float64
	// @alias 击杀获得活力
	// 从杀死该单位中获得的活力。
	J击杀获得活力 float64
	// @alias 减免伤害比例
	// 如果大于零，伤害将优先用于活力，然后才是生命值。每点消耗的护盾将吸收这些点的伤害值。
	// 不作用于生命值
	J减免伤害比例 float64
	// @alias 输出的治疗倍数
	// 施法者制造的治疗加成
	S输出的治疗倍数 float64
	// @alias 获得的治疗倍数
	// 目标获得的治疗加成
	H获得的治疗倍数 float64
}

// @alias 单位标旗
type D单位标旗 int8

const (
	D单位标旗_禁止转身 D单位标旗 = 1
	D单位标旗_禁止移动 D单位标旗 = 2
	D单位标旗_禁止攻击 D单位标旗 = 3
	D单位标旗_禁止施法 D单位标旗 = 4
	D单位标旗_投射物  D单位标旗 = 5
	D单位标旗_无敌   D单位标旗 = 6
	// 不会被埋葬（清理），可使用复活
	D单位标旗_禁止埋葬 D单位标旗 = 7
)
